# -*- coding: utf-8 -*-

"""
  @author: tangliqi
  @date: 2022/11/1 16:25
  @python version: 3.6 
  @contact me: 110
  ---------------------------------------
  @desc: python算法实现 => 类、对象简介.py
"""
'''
# 类对象：
将具有相似属性和方法的对象总结抽象为类对象，可以定义相似的一些属性和方法，不同的实例对象去引用类对象的属性和方法，能减少代码的重复率。

# 类属性：
类对象所有的属性，类对象和实例对象均可以访问，被它们共同拥有；

# 公有类属性：
可以在类外修改类属性，需要通过类对象引用直接修改；
类内可以通过类方法修改类属性。
如果通过实例对象来引用类属性，相当于实例对象在实例方法中创建了一个和类属性相同的名字，等同于局部变量实例属性，和类属性无关；

# 私有类属性：
类外通过类对象引用不能直接更改，只能通过实例方法调用类对象更改。

# 类方法：
需要修饰器@classmethod，标示其为类方法，类方法的第一个参数必须为类对象，一般用cls表示，通过cls引用的必须是类属性和类方法。

# 静态方法：
需要修饰器@staticmethod，标示其为静态方法。需要做一些功能，和类相关，但不需要类和对象参与，此时可以使用静态方法，静态方法可以不需要参数。

# 实例对象：
通过类对象创建的实例对象

# 实例属性：
通过方法定义的属性

# 私有实例属性：
__开头定义的变量名；只能通过方法调用来更改
公有实例属性：
可以通过实例对象重新定义

# 实例方法：
第一个参数公认为self，可以调用类对象和实例对象。

# 私有方法：
只能在类内调用，如果类外调用，则需要类内的公有方法调用类内的私有方法，在类外调用这个公有方法，则间接调用了私有方法。
一个程序中最核心的内容，不能随意调用，可以设置为私有方法，通过公有方法的判断去调用私有方法！

# 公有方法：
可以在类内类外随意调用。

# 魔法方法：
例如__init__方法，用两个__前后包裹的方法
'''


class Animal(object):  # 类对象

    age = 0  # 公有类属性
    __like = None  # 私有类属性

    def __init__(self):  # 魔法方法
        self.name = 'haha'  # 公有实例属性
        self.__sex = 'man'  # 私有实例属性

    def smile(self):  # 公有方法  self指向实例对象
        pass

    def __jump(self):  # 私有方法
        pass

    @classmethod
    def run(cls):  # 类方法  cls 指向类对象
        pass

    @staticmethod
    def msg():  # 静态方法，可以没有参数
        pass
